package Array.Simulation;//给你一个正整数 n ，生成一个包含 1 到 n² 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
//
// 
//
// 示例 1： 
//
// 
//输入：n = 3
//输出：[[1,2,3],[8,9,4],[7,6,5]]
// 
//
// 示例 2： 
//
// 
//输入：n = 1
//输出：[[1]]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 20 
// 
// Related Topics 数组 矩阵 模拟 👍 711 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class generateMatrix {
    public int[][] generateMatrix(int n) {
        //模拟
        int[][] matrix = new int[n][n];

        int top = 0, bottom = n-1;
        int left = 0, right = n-1;
        int i = 1;
        //下标不越界
        while(top<=bottom && left<=right){
            // 从左到右
            for(int col=left;col<=right;col++){
                matrix[top][col] = i;
                i++;
            }
            //从上到下
            for(int row=top+1;row<=bottom;row++){
                matrix[row][right] = i;
                i++;
            }
            if(top<bottom && left<right){
                //从右到左
                for(int col=right-1;col>left;col--){
                    matrix[bottom][col] = i;
                    i++;
                }
                //从下到上
                for(int row=bottom;row>top;row--){
                    matrix[row][left] = i;
                    i++;
                }
            }

            top++;
            bottom--;
            left++;
            right--;
        }
        return matrix;

    }
}
//leetcode submit region end(Prohibit modification and deletion)
